package cn.learn.office.excel_v2.sort;


import cn.learn.office.excel_v2.ExportExcelUtil;
import cn.learn.office.excel_v2.ExportExcelVo;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;

/**
 * 有实体类的属性默认排序的导出
 *
 * @author huangyezhan
 * @version 2.0
 * @date 2020年4月20日21:17:32
 */
@Deprecated
public class DomainDefaultSort implements HandlerColumnSort {

    /**
     * 有实体类的属性默认排序的导出(如果不是 属性数量,和顺序完全一致, 不建议用该方法)
     * 有要写入Excel表格的属性是从父类继承过来的, 不要用该方法
     *
     * @param excelVo             Excel表格存储的数据
     * @param createStyleInstance poi的cell样式对象
     * @param sheet               poi的sheet页对象
     */
    @Override
    public void columnSort(ExportExcelVo excelVo, Sheet sheet, Map<ExportExcelVo.Position, CellStyle> createStyleInstance) {
        List    columns = excelVo.getList();
        Field[] fields  = columns.get(0).getClass().getDeclaredFields();
        //开始导入数据开始行数号（去掉表头的行数）
        int startRowNum = excelVo.getHeadRowNum();
        try {
            Row  row  = null;
            Cell cell = null;
            for (int i = 0; i < columns.size(); i++) {
                row = sheet.createRow(i + startRowNum);
                Object oi = columns.get(i);
                //跟标题列数保持一样长度
                for (int j = 0; j < excelVo.getColumnNum(); j++) {
                    cell = row.createCell(j);
                    if (!fields[j].isAccessible()) {
                        fields[j].setAccessible(true);
                        //获取该属性的值
                        Object o1 = fields[j].get(oi);

                        ExportExcelUtil.fillDatabyRealType(createStyleInstance, o1, cell);
                    }
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

}
